<?php
namespace Bundle\ModuleBundle\Interfaces;

interface ModuleInterface
{
    /**
     * Загрузка и подготовка основных функций модуля
     * @abstract
     * @return void
     */
    public function boot();

    /**
     * Получение объекта источника данных для модуля
     * @abstract
     * @return DataSourceInterface
     */
    public function getDataSource();

    /**
     * Получение маршрутизации модуля
     * @abstract
     * @return array
     */
    public function getRouting();

    /**
     * Обработка данных с формы. Обёртка для источника данных.
     * @abstract
     * @param array $data
     * @return void
     */
    public function processFormData($data);

    /**
     * Экспорт схемы формы для данного модуля.
     * @abstract
     * @return void
     */
    public function exportFormScheme();


    /**
     * Обработка данных на основе сущностей. Обёртка для источника данных.
     * @abstract
     * @param  $data
     * @return void
     */
    public function processEntitiesData($data);

    /**
     * Экспорт схемы сущности.
     * @abstract
     * @return void
     */
    public function exportEntityScheme();

    /**
     * Есть ли объявление блока настройки работы с базой данных
     * @abstract
     * @return boolean
     */
    public function hasPersistantConfig();

    /**
     * Получение шаблона модуля
     * @abstract
     * @return string
     */
    public function getTemplate();
    
    /**
     * Установка шаблона
     * @param $template
     */
    public function setTemplate($template);

    /**
     * @abstract
     * @return string
     */
    public function getEntityClassName();
}
